Add initial test for get/set RTCRtpParameters 
diff --git a/webrtc/RTCRtpParameters-rtcp.html b/webrtc/RTCRtpParameters-rtcp.html new file mode 100644 index 0000000..94d5afd --- /dev/null +++ b/webrtc/RTCRtpParameters-rtcp.html 
@@ -0,0 +1,105 @@ +<!doctype html> +<meta charset=utf-8> +<title>RTCRtpParameters rtcp</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="dictionary-helper.js"></script> +<script src="RTCRtpParameters-helper.js"></script> +<script> + 'use strict'; + + // Test is based on the following editor draft: + // https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html + + // The following helper functions are called from RTCRtpParameters-helper.js: + // validateSenderRtpParameters + + /* + 5.2. RTCRtpSender Interface + interface RTCRtpSender { + Promise<void> setParameters(optional RTCRtpParameters parameters); + RTCRtpParameters getParameters(); + }; + + dictionary RTCRtpParameters { + DOMString transactionId; + sequence<RTCRtpEncodingParameters> encodings; + sequence<RTCRtpHeaderExtensionParameters> headerExtensions; + RTCRtcpParameters rtcp; + sequence<RTCRtpCodecParameters> codecs; + RTCDegradationPreference degradationPreference; + }; + + dictionary RTCRtcpParameters { + [readonly] + DOMString cname; + + [readonly] + boolean reducedSize; + }; + + getParameters + - rtcp.cname is set to the CNAME of the associated RTCPeerConnection. + + rtcp.reducedSize is set to true if reduced-size RTCP has been negotiated for + sending, and false otherwise. + */ + + /* + 5.2. setParameters + 7. If parameters.encodings.length is different from N, or if any parameter + in the parameters argument, marked as a Read-only parameter, has a value + that is different from the corresponding parameter value returned from + sender.getParameters(), abort these steps and return a promise rejected + with a newly created InvalidModificationError. Note that this also applies + to transactionId. + */ + promise_test(t => { + const pc = new RTCPeerConnection(); + const { sender } = pc.addTransceiver('audio'); + + const param = sender.getParameters(); + validateSenderRtpParameters(param); + + const { rtcp } = param; + + if(rtcp === undefined) { + param.rtcp = { cname: 'foo' }; + + } else if(rtcp.cname === undefined) { + rtcp.cname = 'foo'; + + } else { + rtcp.cname = `${rtcp.cname}-modified`; + } + + return promise_rejects(t, 'InvalidModificationError', + sender.setParameters(param)); + + }, `setParameters() with modified rtcp.cname should reject with InvalidModificationError`); + + promise_test(t => { + const pc = new RTCPeerConnection(); + const { sender } = pc.addTransceiver('audio'); + + const param = sender.getParameters(); + validateSenderRtpParameters(param); + + const { rtcp } = param; + + if(rtcp === undefined) { + param.rtcp = { reducedSize: true }; + + } else if(rtcp.reducedSize === undefined) { + rtcp.reducedSize = true; + + } else { + rtcp.reducedSize = !rtcp.reducedSize; + } + + return promise_rejects(t, 'InvalidModificationError', + sender.setParameters(param)); + + }, `setParameters() with modified rtcp.reducedSize should reject with InvalidModificationError`); + +</script>